package cn.demoncat.util.lang.constant;

import cn.demoncat.util.exception.ParamRuntimeException;

/**
 * 报表数据常量
 * 
 * @author 延晓磊
 *
 * @since 2019年12月11日
 */
public final class ReportConstant {

	/**
	 * 图表模式错误：格式错误
	 */
	public static final String CHARTS_MODE_ERROR_MSG = "图表模式必须是3位整数：2位模式ModeTime/ModePeriod + 1位维度Dimension";
	/**
	 * 图表模式错误：非预设
	 */
	public static final ParamRuntimeException CHART_MODE_ERROR = new ParamRuntimeException("图表模式错误");
	/**
	 * 动态图表的周期数过小
	 */
	public static final ParamRuntimeException DYNAMIC_CHART_NUM_ERROR = new ParamRuntimeException("图表周期数不能小于1");
 
	/**
	 * 图表维度
	 * 
	 * @author 延晓磊
	 *
	 * @since 2020年7月9日
	 */
	public static final class Dimension{
		/**
		 * 单维度 count
		 */
		public static final String COUNT = "1";
		/**
		 * 单维度 sum
		 */
		public static final String SUM = "2";
		/**
		 * 双维度 count,sum
		 */
		public static final String COUNT_SUM = "3";
		/**
		 * 多维度 item:count
		 */
		public static final String COUNTS = "4";
		/**
		 * 多维度 item:sum
		 */
		public static final String SUMS = "5";
		/**
		 * 多维度 item:字段值
		 */
		public static final String FIELD = "6";
	}
	
	/**
	 * 图表模式-分时
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年10月19日
	 */
	public static final class ModeTime{
		
		/**
		 * 时表
		 */
		public static final String HOUR = "11";
		/**
		 * 日表
		 */
		public static final String DAY = "12";
		/**
		 * 月表
		 */
		public static final String MONTH = "13";
		/**
		 * 年表
		 */
		public static final String YEAR = "14";
		/**
		 * 周表
		 */
		public static final String WEEK = "15";
		/**
		 * 季表
		 */
		public static final String QUARTER = "16";
		
		/**
		 * 模式类型/前缀
		 */
		public static final String MODE_TYPE = "1";
	}
	
	/**
	 * 图表模式-周期
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年10月19日
	 */
	public static final class ModePeriod{
		
		/**
		 * 时表
		 */
		public static final String HOUR = "21";
		/**
		 * 日表
		 */
		public static final String DAY = "22";
		/**
		 * 月表
		 */
		public static final String MONTH = "23";
		/**
		 * 年表
		 */
		public static final String YEAR = "24";
		/**
		 * 周表
		 */
		public static final String WEEK = "25";
		/**
		 * 季表
		 */
		public static final String QUARTER = "26";
		
		/**
		 * 模式类型/前缀
		 */
		public static final String MODE_TPYE = "2";
	}
	
	/**
	 * 统计模式
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年10月19日
	 */
	public static final class CountMode{
		
		/**
		 * 统计总数：num = COUNT(count)
		 */
		public static final String COUNT = "101";
		/**
		 * 统计总数，Item分组：list = [{id = item, count = COUNT(count)}]
		 */
		public static final String COUNT_ITEM = "201";
		/**
		 * 统计总数，Item分组，展示Title：list = [{id = item, name = title, count = COUNT(count)}]
		 */
		public static final String COUNT_ITEM_TITLE = "301";
		
		/**
		 * 统计总额：num = COUNT(sum)
		 */
		public static final String SUM = "110";
		/**
		 * 统计总额，Item分组：list = [{id = item, sum = COUNT(sum)}]
		 */
		public static final String SUM_ITEM = "210";
		/**
		 * 统计总额，Item分组，展示Title：list = [{id = item, name = title, sum = COUNT(sum)}]
		 */
		public static final String SUM_ITEM_TITLE = "310";
		
		/**
		 * 统计总数+总额：{count = COUNT(count), sum = COUNT(sum)}
		 */
		public static final String COUNT_SUM = "111";
		/**
		 * 统计总数+总额，Item分组：list = [{id = item, count = COUNT(count), sum = COUNT(sum)}]
		 */
		public static final String COUNT_SUM_ITEM = "211";
		/**
		 * 统计总数+总额，Item分组，展示Title：list = [{id = item, name = title, count = COUNT(count), sum = COUNT(sum)}]
		 */
		public static final String COUNT_SUM_ITEM_TITLE = "311";
	}
	
	/**
	 * 报表字段
	 * 
	 * @author 延晓磊
	 *
	 * @since 2019年12月11日
	 */
	public enum Column{
		// 时表
		HOUR("year,month,day,hour", "hour"),
		// 日表
		DAY("year,month,day", "day"),
		// 月表
		MONTH("year,month", "month"),
		// 年表
		YEAR("year", "year"),
		
		// 时表-Item多维度
		HOUR_ITEM("year,month,day,hour,item", "hour"),
		// 日表-Item多维度
		DAY_ITEM("year,month,day,item", "day"),
		// 月表-Item多维度
		MONTH_ITEM("year,month,item", "month"),
		// 年表-Item多维度
		YEAR_ITEM("year,item", "year"),
		
		// 时表-Item多维度，展示Title
		HOUR_ITEM_TITLE("year,month,day,hour,item,title", "hour"),
		// 日表-Item多维度，展示Title
		DAY_ITEM_TITLE("year,month,day,item,title", "day"),
		// 月表-Item多维度，展示Title
		MONTH_ITEM_TITLE("year,month,item,title", "month"),
		// 年表-Item多维度，展示Title
		YEAR_ITEM_TITLE("year,item,title", "year"),
		
		// Item多维度
		ITEM("item", null),
		// Item多维度，展示Title
		ITEM_TITLE("item,title", null)
		;
 
		// 分组字段
		private final String groupColumns;
		// 排序字段
		private final String sortColumns;
		
		Column(String groupColumns, String sortColumns) {
			this.groupColumns = groupColumns;
			this.sortColumns = sortColumns;
		}
		
		public String getGroupColumns() {
			return groupColumns;
		}
		public String getSortColumns() {
			return sortColumns;
		}
	}
 
}
